#ifndef EXPORTCOMMAND_H
#define EXPORTCOMMAND_H

#include <QObject>
#include <memory>
#include "unifiedfileinfo.h"
#include "processingsettings.h"
#include "asyncexportworker.h"

class MainWindow;
class MergedExportManager;
class UnifiedPageRenderer;

/**
 * 导出命令对象
 * Martin Fowler重构：Command Pattern - 封装导出操作
 * 将复杂的导出流程封装为简单的命令接口
 */
class ExportCommand : public QObject
{
    Q_OBJECT

public:
    explicit ExportCommand(MainWindow* mainWindow, QObject* parent = nullptr);
    ~ExportCommand();

    // 执行导出命令
    void execute();

    // 取消导出
    void cancel();

    // 暂停/恢复导出
    void pause();
    void resume();

    // 状态查询
    bool isActive() const;
    bool isPaused() const;

    // 组件设置
    void setExportManager(MergedExportManager* manager);
    void setPageRenderer(UnifiedPageRenderer* renderer);

signals:
    void exportStarted(const QString& taskId);
    void exportCompleted(const QString& outputPath);
    void exportFailed(const QString& error);
    void exportCancelled();

private slots:
    void onTaskStarted(const QString& taskId);
    void onTaskCompleted(const QString& taskId, const QString& outputPath);
    void onTaskFailed(const QString& taskId, const QString& error);
    void onTaskCancelled(const QString& taskId);
    void onUIUpdateRequested(const QString& text, const QColor& color);

private:
    // 初始化工作线程
    void initializeWorker();

    // 生成导出路径
    QString generateOutputPath() const;

    // 获取当前文件列表
    QList<UnifiedFileInfo> getCurrentFiles() const;

    // 获取主窗口当前显示的页面
    QList<QImage> getCurrentDisplayedPagesFromMainWindow();

    // 更新UI状态
    void updateStatusBar(const QString& text, const QColor& color);

    MainWindow* m_mainWindow;
    std::unique_ptr<AsyncExportWorker> m_worker;
    QThread* m_workerThread;

    // 组件引用
    MergedExportManager* m_exportManager;
    UnifiedPageRenderer* m_pageRenderer;

    // 状态
    bool m_isActive;
    QString m_currentTaskId;
};

#endif // EXPORTCOMMAND_H